(define (fact n)
    (if (= n 1) 
        1
        (* n (fact (- n 1)))
    )
)
(define (fact-tail n)
    (fact-rec n n)
)
(define (fact-rec n p)
    (if (= n 1) 
        p
        (fact-rec (- n 1) (* p (- n 1)))
    )
)
(time (fact 10000))
(time (fact-tail 10000))
(exit)